#pragma once

#include "base_registrar.h"

namespace bootstrap {
namespace registrars {

/**
 * @brief 应用层注册器
 * @details 负责注册应用层的服务和用例
 */
class ApplicationRegistrar : public BaseRegistrar
{
public:
    explicit ApplicationRegistrar(std::shared_ptr<ServiceContainer> container);
    virtual ~ApplicationRegistrar() = default;

protected:
    void doRegisterServices() override;
    void doInitializeServices() override;

private:
    /**
     * @brief 注册车辆管理服务
     */
    void registerVehicleServices();

    /**
     * @brief 初始化 AGV（从配置文件）
     */
    void initializeVehicles();

    /**
     * @brief 初始化任务服务
     */
    void initializeTaskService();

    /**
     * @brief 注册通用服务（聚合日志和配置）
     */
    void registerCommonServices();

    /**
     * @brief 注册其他应用服务
     */
    void registerOtherServices();

    /**
     * @brief 注册仿真服务
     */
    void registerSimulationService();

    /**
     * @brief 初始化仿真服务
     */
    void initializeSimulationService();

    /**
     * @brief 启动仿真引擎
     */
    void startSimulationEngine();
};

} // namespace registrars
} // namespace bootstrap